home *** CD-ROM | disk | FTP | other *** search
/ Total Network Tools 2002 / NextStepPublishing-TotalNetworkTools2002-Win95.iso / Archive / Misc Servers / Zope.exe / CREOSOTE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-19  |  2.8 KB  |  139 lines

  1. /* creosote.c */
  2.  
  3. #include "creosote.h"
  4.  
  5. struct MrCreosote CreosoteServer;
  6.  
  7. void closeMrCreosote()
  8. {
  9.     struct MrCreosote *c = &CreosoteServer;
  10.     if (c->socket)
  11.     {
  12. #ifdef UNIX
  13.         close(c->socket);
  14. #endif
  15. #ifdef WIN32
  16.         closesocket(c->socket);
  17.         WSACleanup();
  18. #endif
  19.     }
  20.     c->socket = 0;
  21. }
  22.  
  23. #ifdef UNIX
  24. int initializeMrCreosote()
  25. {
  26.     struct MrCreosote *c = &CreosoteServer;
  27.     SOCKADDR_IN addr, *serv;
  28.     creosote_socket *s;
  29.  
  30.     serv = &(c->serv_addr);
  31.     s = &(c->socket);
  32.  
  33.     c->port = CREOSOTE_PORT;
  34.     strcpy(c->host, CREOSOTE_HOST);
  35.  
  36.     bzero(serv, sizeof(*serv));
  37.     serv->sin_family = AF_INET;
  38.     serv->sin_addr.s_addr = inet_addr(c->host);
  39.     serv->sin_port = htons(c->port);
  40.  
  41.     if ((*s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
  42.     {
  43.         return(-1);
  44.     }
  45.  
  46.     bzero((char *) &addr, sizeof(addr));
  47.     addr.sin_family = AF_INET;
  48.     addr.sin_addr.s_addr = htonl(INADDR_ANY);
  49.     addr.sin_port = htons(0);
  50.  
  51.     if (bind(*s, (struct sockaddr *) &addr, sizeof(addr)) < 0)
  52.     {
  53.         return(-1);
  54.     }
  55.  
  56.     return(0);
  57. }
  58. #endif
  59. #ifdef WIN32
  60. int initializeMrCreosote()
  61. {
  62.     struct MrCreosote *c = &CreosoteServer;
  63.     SOCKADDR_IN *serv;
  64.     creosote_socket *s;
  65.     WSADATA WsaData;
  66.     int enable = 1;
  67.  
  68.     s = &(c->socket);
  69.  
  70.     if (!c->port)
  71.     {
  72.         c->port = CREOSOTE_PORT;
  73.     }
  74.  
  75.     if (!c->host[0])
  76.     {
  77.         strcpy(c->host, CREOSOTE_HOST);
  78.     }
  79.  
  80.     if (0 != WSAStartup(MAKEWORD(2,0), &WsaData))
  81.     {
  82.         return(-1);
  83.     }
  84.  
  85.     /* Set the address */
  86.     serv = &(c->serv_addr);
  87.     serv->sin_family = AF_INET;
  88.     serv->sin_addr.s_addr = inet_addr(c->host);
  89.     serv->sin_port = htons((short)c->port);
  90.  
  91.     /* Create socket */
  92.     *s = socket(AF_INET, SOCK_DGRAM, 0);
  93.     if (INVALID_SOCKET == *s) { return(-1); }
  94.  
  95.     /* Permit the socket to broadcast */
  96.     if (SOCKET_ERROR == setsockopt(*s, SOL_SOCKET, SO_BROADCAST, (char *) &enable, sizeof(enable)))
  97.     {
  98.         return(-1);
  99.     }
  100.  
  101.     return(0);
  102. }
  103. #endif
  104.  
  105. void setMrCreosoteHost(char *host)
  106. {
  107.     /* 
  108.        If not using localhost, setMrCreosoteHost() must be called
  109.        before initializeMrCreosote(). 
  110.     */
  111.     strcpy(CreosoteServer.host, host);
  112. }
  113.  
  114. void setMrCreosotePort(int port)
  115. {
  116.     /* must be done before initializeMrCreosote() is called */
  117.     CreosoteServer.port = port;
  118. }
  119.  
  120. void spewMrCreosote(char *msg)
  121. {
  122.     struct MrCreosote *c = &CreosoteServer;
  123.     sendto(c->socket, msg, strlen(msg), 0, (struct sockaddr *) &(c->serv_addr), sizeof(c->serv_addr));
  124. }
  125.  
  126. #if 0
  127. int main(int argc, char *argv[])
  128. {
  129.     if ( (initializeMrCreosote()) < 0)
  130.     {
  131.         printf("initializeMrCreosote() failed\n");
  132.         exit(1);
  133.     }
  134.     spew("Hello, world");
  135.     closeMrCreosote();
  136.     return(0);
  137. }
  138. #endif
  139.